iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

Viem 介紹系列 第 4

Day4 - Introduction to Clients (2) - Wallet Client & Test Client

  • 分享至 

  • xImage
  •  

Wallet Client

提供錢包用戶交互的介面

錢包用戶分為兩類

  • JSON-RPC Accounts (如:預覽器拓展錢包、WalletConnect…)
  • Local Accounts (如:私鑰 或 註記詞)

import

import { createWalletClient } from 'viem'

JSON-RPC Accounts

簡單的範例

import { createWalletClient, custom } from 'viem'
import { mainnet } from 'viem/chains'

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum)
})
const [address] = await client.getAddresses() 
// or: const [address] = await client.requestAddresses()

const hash = await client.sendTransaction({ 
  account: address,
  to: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
  value: parseEther('0.001')
})

上面可以看到 window.ethereum 這就是使用預覽器中的ethereum 的提供商(ex:小狐狸…)

簡單的範例

import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'

const client = createWalletClient({
  chain: mainnet,
  transport: http()
})

const account = privateKeyToAccount('0x...') // 設定私鑰

const hash = await client.sendTransaction({ 
  account,
  to: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
  value: parseEther('0.001')
})

用法上差不多只是帳號使用方式不同。

實作範例:
https://github.com/0xRory/ITHepleViem/blob/main/examples/2_2_wallet.js

參考:
https://viem.sh/docs/clients/wallet.html

Test Client

用於測試的 JSON-RPC AP,這方法通過本地乙太坊測試節點的介面,例如(Hardhart、Ganache)

import

import { createTestClient } from 'viem'

JSON-RPC Accounts

簡單的範例

import { createTestClient, http, publicActions, walletActions } from 'viem'
import { foundry } from 'viem/chains'

const client = createTestClient({
  chain: foundry,
  mode: 'hardhart',
  transport: http(), 
})
  .extend(publicActions)
  .extend(walletActions)

const blockNumber = await client.getBlockNumber() // Public Action
const hash = await client.sendTransaction({ ... }) // Wallet Action
const mine = await client.mine({ blocks: 1 }) // Test Action

如果要使用的話請記得把測試節點跑起來喔!!!!

上面可以看到 extend 這部分可以擴充 public, wallet 的動作,這樣的話不會建立三個不同的用戶端

參考:
https://viem.sh/docs/clients/test.html

老實說這樣的分類個人覺得還不錯至少在宣告的時候我們就知道這些 RPC 會是什麼用途的。/images/emoticon/emoticon62.gif


上一篇
Day3 - Introduction to Clients (1) - Public Client
下一篇
Day5 - Introduction to Transports
系列文
Viem 介紹11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言